home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 July / EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso / earcd / phase5 / ppcrelease / examples / msg2oldppc.c < prev    next >
C/C++ Source or Header  |  1998-02-21  |  4KB  |  177 lines

  1. #include <exec/types.h>
  2. #include <exec/nodes.h>
  3. #include <exec/lists.h>
  4. #include <exec/memory.h>
  5. #include <utility/tagitem.h>
  6. #include <powerup/ppclib/interface.h>
  7. #include <powerup/ppclib/message.h>
  8. #include <powerup/gcclib/powerup_protos.h>
  9.  
  10. #define TEXT    "Text sent by PPC processor\n"
  11.  
  12. BPTR    MyFile;
  13. void printf(char *String);
  14.  
  15. #define    DEBUG    0
  16.  
  17. int    main(void)
  18. {
  19. struct TagItem    MyTags[10];
  20. void        *PPCPort;
  21. void        *ReplyPort;
  22. void        *M68kPort;
  23. void        *PPCMsg;
  24. void        *M68kMsg;
  25. void        *Body;
  26. ULONG           result;
  27.  
  28. #if DEBUG
  29.   if (MyFile = PPCOpen("con:0/0/640/200/MessageDemo - PPC output/CLOSE", MODE_NEWFILE))
  30.   {
  31.     printf("Creating message port\n");
  32. #endif
  33.     MyTags[0].ti_Tag  = PPCPORTTAG_NAME;
  34.     MyTags[0].ti_Data = (ULONG) "PPC port";
  35.     MyTags[1].ti_Tag  = TAG_DONE;
  36.     if (PPCPort = PPCCreatePort(MyTags))
  37.     {
  38.  
  39. #if DEBUG
  40.       printf("Waiting for M68k message\n");
  41. #endif
  42.       PPCWaitPort(PPCPort);
  43.  
  44. #if DEBUG
  45.       printf("Getting message\n");
  46. #endif
  47.       if (M68kMsg = PPCGetMessage(PPCPort))
  48.       {
  49. #if DEBUG
  50.         printf("Message: ");
  51.         printf((char*) PPCGetMessageAttr(M68kMsg, PPCMSGTAG_DATA));
  52. #endif
  53.         PPCReplyMessage(M68kMsg);
  54.       }
  55.       else
  56.       {
  57. #if DEBUG
  58.         printf("Did not get m68k msg\n");
  59. #endif
  60.       }
  61.  
  62. #if DEBUG
  63.       printf("Allocating memory for message body\n");
  64. #endif
  65.       if (Body = PPCAllocVec(sizeof(TEXT), MEMF_PUBLIC))
  66.       {
  67. #if DEBUG
  68.         printf("Creating reply port\n");
  69. #endif
  70.         MyTags[0].ti_Tag = TAG_DONE;
  71.         if (ReplyPort = PPCCreatePort(MyTags))
  72.         {
  73. #if DEBUG
  74.           printf("Creating message\n");
  75. #endif
  76.           if (PPCMsg = PPCCreateMessage(ReplyPort, sizeof(TEXT)))
  77.           {
  78. #if DEBUG
  79.             printf("Obtaining M68k port\n");
  80. #endif
  81.             MyTags[0].ti_Tag  = PPCPORTTAG_NAME;
  82.             MyTags[0].ti_Data = (ULONG) "M68k port";
  83.             MyTags[1].ti_Tag  = TAG_DONE;
  84.             while (!(M68kPort = PPCObtainPort(MyTags)));
  85.  
  86. #if DEBUG
  87.             printf("Sending message\n");
  88. #endif
  89.             strcpy(Body, TEXT);
  90.  
  91.             PPCSendMessage(M68kPort,
  92.                            PPCMsg,
  93.                            Body,
  94.                            sizeof(TEXT),
  95.                            0x87654321);
  96.  
  97. #if DEBUG
  98.             printf("Waiting for reply\n");
  99. #endif
  100.             PPCWaitPort(ReplyPort);
  101.  
  102. #if DEBUG
  103.             printf("Releasing M68k port\n");
  104. #endif
  105.             PPCReleasePort(M68kPort);
  106.  
  107. #if DEBUG
  108.             printf("Deleting message\n");
  109. #endif
  110.             PPCDeleteMessage(PPCMsg);
  111.  
  112.           }
  113.           else
  114.           {
  115. #if DEBUG
  116.             printf("Could not create ppc msg\n");
  117. #endif
  118.           }
  119.  
  120. #if DEBUG
  121.           printf("Deleting reply port\n");
  122. #endif
  123.           while (PPCDeletePort(ReplyPort) == FALSE);
  124.  
  125.         }
  126.         else
  127.         {
  128. #if DEBUG
  129.           printf("Could not create reply port\n");
  130. #endif
  131.         }
  132.  
  133. #if DEBUG
  134.         printf("Freeing message body memory\n");
  135. #endif
  136.         PPCFreeVec(Body);
  137.       }
  138.       else
  139.       {
  140. #if DEBUG
  141.         printf("Could not alloc mem for msg body\n");
  142. #endif
  143.       }
  144.  
  145. #if DEBUG
  146.       printf("Deleting message port\n");
  147. #endif
  148.       while (PPCDeletePort(PPCPort) == FALSE)
  149.       {
  150. /*
  151.         PPCRawDoFmt("deleteport failed...\n",
  152.                     NULL,
  153.                     1,                // 0=Buffer,1=serial <> NOT supported yet
  154.                     NULL);
  155. */
  156.       }
  157.     }
  158.     else
  159.     {
  160. #if DEBUG
  161.       printf("Could not create ppc port\n");
  162. #endif
  163.     }
  164.  
  165. #if DEBUG
  166.     printf("Closing output\n");
  167.     PPCClose(MyFile);
  168.   }
  169. #endif
  170. }
  171.  
  172. void printf(char *String)
  173. {
  174.   PPCWrite(MyFile, String, strlen(String));
  175. }
  176.  
  177.